package com.flycms.modules.shiro;

import org.apache.shiro.SecurityUtils;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

/**
 * Biz-Boot, All rights reserved
 * 版权：企业之家网 -- 企业建站管理系统<br/>
 * 开发公司：97560.com<br/>
 * @author 孙开飞
 *
 * @version 1.0 <br/>
 * @email 79678111@qq.com
 * @Date: 23:18 2019/8/15
 */
@Component
public class ShiroTag {

  // 判断当前用户是否已经登录认证过
  public boolean isAuthenticated() {
    return SecurityUtils.getSubject().isAuthenticated();
  }

  // 获取当前用户的用户名
  public String getPrincipal() {
    return (String) SecurityUtils.getSubject().getPrincipal();
  }

  // 判断用户是否有 xx 角色
  public boolean hasRole(String name) {
    return SecurityUtils.getSubject().hasRole(name);
  }

  // 判断用户是否有 xx 权限
  public boolean hasPermission(String name) {
    return !StringUtils.isEmpty(name) && SecurityUtils.getSubject().isPermitted(name);
  }

  // 判断用户是否有 xx 权限
  public boolean hasPermissionOr(String... name) {
    boolean[] permitted = SecurityUtils.getSubject().isPermitted(name);
    for (boolean b : permitted) {
      // 如果有一个权限，就成功
      if (b) {
        return true;
      }
    }
    return false;
  }

  // 判断用户是否有 xx 权限
  public boolean hasPermissionAnd(String... name) {
    boolean[] permitted = SecurityUtils.getSubject().isPermitted(name);
    for (boolean b : permitted) {
      // 必须所有的权限都有，才成功
      if (!b) {
        return false;
      }
    }
    return true;
  }

  // 判断用户是否有 xx 权限
  public boolean hasAllPermission(String... name) {
    return SecurityUtils.getSubject().isPermittedAll(name);
  }
}
